// https://leetcode.cn/problems/uncrossed-lines/

// k 对相等的元素组成的序列即为数组的公共子序列。要计算可以绘制的最大连线数，即为计算数组的最长公共子序列的长度。
class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
        int m = nums1.size();
        int n = nums2.size();
        vector<vector<int>> rec(m + 1, vector<int>(n + 1));
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                rec[i][j] = rec[i - 1][j - 1];
                if (nums1[i - 1] == nums2[j - 1]) {
                    rec[i][j] += 1;
                }
                rec[i][j] = max(max(rec[i - 1][j], rec[i][j - 1]), rec[i][j]);
            }
        }
        return rec[m][n];
    }
};